from django.shortcuts import render
from rest_framework.response import Response

# Create your views here.
from rest_framework.views import APIView
from course import models,courseser
from rest_framework.pagination import PageNumberPagination
from rest_framework.generics import ListAPIView
from django.db.models import Q

class cate(APIView):
    def get(self,request):
        # 通过条件获取数据
        courselist=models.CateModel.objects.all().filter(parent=None).order_by('order')
        # 序列化
        ser=courseser.CateSonSer(courselist,many=True)
        # 获取前三条数据到首页
        data=ser.data

        for itme in data:
            itme["son"]=itme["son"][0:3]
            print(itme)
        return Response({"msg":"ok","data":ser.data})
#     当前分类以及推荐在首页的课程信息


# 通过id获取数据
# 无用接口



# 通过pid获取课程
class catecourse(APIView):

    def  get(self,request):
#     获取前端传过来的id值
        perenid=request.query_params.get("pid")
#     通过id获取值
        cate=models.CateModel.objects.filter(id=perenid).first()
#      序列化
        ser=courseser.CateSonSer(cate)
#      定义一个列表
        sonlist=[]
#      循环拿到二级分类的id
        for itme in ser.data["son"]:
            sonlist.append(itme["id"])

#       通过这个id拿到课程数据

        course=models.CourseModel.objects.filter(category__in=sonlist,is_home=True).order_by('order')[:4]
#      序列化数据
        coursedata=courseser.CourseSer(course,many=True).data
#      获取分类数据
        datalist=ser.data
#       将课程数据添加到分类中
        datalist["course"]=coursedata
# 最后将数据返回到前端
        return Response({"mes":"ok","data":datalist})


# 获取所有分类
class catebyid(APIView):
    def get(self, request):
        # parentid = request.query_params.get("pid")
        catelist = models.CateModel.objects.filter(parent=None)
        ser = courseser.CateSonSer(catelist,many=True)

        # 定义一个列表获取二级分类的数据

        return Response({"msg": "ok", "data": ser.data})

class getsoncate(APIView):
    def get(self,request):
#         默认展示所有的二级分类,如果给参数就展示当前的二级分类
        parenid=request.query_params.get("pid")
        if parenid:
            sondata=models.CateModel.objects.filter(parent=parenid)
        else:
            sondata=models.CateModel.objects.filter(parent__gt=0)

#         序列化数据
        ser=courseser.CateSer(sondata,many=True)
        return Response({"mes":"ok","data":ser.data})


# 分页的功能
class CoursePage(PageNumberPagination):
    page_size = 3
    page_query_param = "page"
    page_size_query_param = "size"
class getcourse(ListAPIView):
    serializer_class = courseser.CourseSer
    pagination_class = CoursePage
    def get_queryset(self):
        # 展示数据
        query=Q(isshow=True)
#         获取前端的两个id 一级分类 和二级分类
#         二级分类
        cateid=self.request.query_params.get("cateid")
        # 一级分类
        directionid=self.request.query_params.get("directionid")
        orderdata=self.request.query_params.get("ordering")

        # 难度
        level=self.request.query_params.get("level")

        if level:

            query=query&Q(level=level)


        if cateid:
#             如果cateid不为空，就不用光directionid只检索cateid
            query=query&Q(category=cateid)
        else:
#             如果cateid为空，directionid不为空fgnav
            if directionid:
#                 根据directionid拿到所有的二级分类【son1,son2,son3】
                son=models.CateModel.objects.filter(parent=directionid)
#                 定义一个列表将二级分类的id存储列表中
                sonlist=[]
                for i in son:
                    sonlist.append(i.id)
                query=query&Q(category__in=sonlist)
        if orderdata:

            quertset=models.CourseModel.objects.filter(query).order_by("order",orderdata)
        else:
            quertset=models.CourseModel.objects.filter(query).order_by("order")


        return quertset



class getdetail(APIView):
    def get(self,request):
#         获取前端传过来的id
        id=request.query_params.get("id")
        data=models.CourseModel.objects.filter(id=id).first()
        ser=courseser.CourseSer(data)
        return Response({"msg":"success","data":ser.data})




















